@邪恶贝壳
2年前 提问
1个回答

数据库的数据不一致性包括哪几种

上官雨宝
2年前

数据库的数据不一致性包括以下几种:

  • 丢失或覆盖更新:当两个或多个事务选择同一数据,并且基于最初选定的值更新该数据时,会发生丢失更新问题。每个事务都不知道其他事务的存在。最后的更新将重写由其他事务所做的更新,这将导致数据丢失。如上述飞机票售票问题。

  • 不可重复读:在一个事务范围内,两个相同查询将返回不同数据,这是由于查询注意到其他提交事务的修改而引起的。如一个事务重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务修改过。即事务1读取某一数据后,事务2对其做了修改,当事务1再次读数据时,得到与第一次不同的值。

  • 读脏数据:指一个事务读取另一个未提交的并行事务所写的数据。当第二个事务选择其他事务正在更新行时,会发生未确认的相关性问题。第二个事务正在读取的数据还没有确认并可能由更新此行的事务所更改。即若事务T2读取事务T1正在修改的一个值(A),此后T1由于某种原因撤销对该值的修改,造成T2读取的值是“脏”的。

  • 破坏性的数据定义语言DDL操作:当一个用户修改一个表的数据时,另一个用户同时更改或删除该表。

数据库完整性主要分为以下这些:

  • 实体完整性(Entity Integrity):明确规定数据表的每一行在表中是唯一的实体。如表中定义的UNIQUE PRIMARYKEY和IDENTITY约束。

  • 域完整性(Domain Integrity):指数据库表中的列必须满足某种特定的数据类型或约束。其中,约束又包括取值范围、精度等规定。如表中的CHECK、FOREIGN KEY约束和DEFAULT、NOT NULL等要求。

  • 参照完整性(Referential Integrity):是指任何两表的主关键字和外关键字的数据要对应一致,确保表之间数据的一致性,以防止数据丢失或造成混乱。主要作用为:禁止在从表中插入包含主表中不存在的关键字的数据行;禁止可导致从表中的相应值孤立的主表中的外关键字值改变;禁止删除在从表中的有对应记录的主表记录。

  • 用户定义完整性(User-defined Integrity):是针对某个特定关系数据库的约束条件,可以反映某一具体应用所涉及的数据必须满足的语义要求。SQL Server提供了定义和检验这类完整性的机制,以便用统一的系统方法进行处理,而不是用应用程序承担此功能。其他完整性类型都支持用户定义的完整性。